/**
 * 腾讯云文字转语音(TTS)接口实现
 */
const tencentcloud = require('tencentcloud-sdk-nodejs');
const fs = require('fs');
const path = require('path');

// 导入对应产品模块的client models
const TtsClient = tencentcloud.tts.v20190823.Client;

// 实例化一个认证对象
const credential = {
    secretId: "AKIDPhmeWN5b1Qj7JMbkgR2RwIVYO0SikZMx",
    secretKey: "ShlcHrFSYVJxhK9qSs674pZFsNgu8D5v"
};

// 创建客户端对象
const clientConfig = {
    credential: credential,
    region: "ap-guangzhou",
    profile: {
        httpProfile: {
            endpoint: "tts.tencentcloudapi.com",
        },
    },
};

// 实例化要请求产品的client对象
const client = new TtsClient(clientConfig);

/**
 * 文本转语音函数
 * @param {string} text - 要转换的文本内容
 * @param {string} outputFile - 输出的音频文件路径
 * @param {number} speed - 语速，取值范围：[-2，2]，默认值为0
 * @returns {Promise<string|null>} - 成功返回文件路径，失败返回null
 */
async function textToSpeech(text, outputFile, speed = 0) {
    try {
        // 构造请求参数
        const params = {
            Text: text,
            SessionId: `session-${text.substring(0, Math.min(10, text.length))}`,
            Volume: 5,
            Speed: speed,  // 使用传入的语速参数
            ProjectId: 0,
            ModelType: 1,
            VoiceType: 101019, // 智彤，粤语女声
            PrimaryLanguage: 1, // 中文(包括粤语)
            SampleRate: 16000,
            Codec: "mp3",
        };

        // 发起API请求
        const data = await client.TextToVoice(params);

        // 将返回的base64音频数据解码并保存为文件
        if (data && data.Audio) {
            // 确保目录存在
            const dir = path.dirname(outputFile);
            if (!fs.existsSync(dir)) {
                fs.mkdirSync(dir, { recursive: true });
            }

            // 解码并写入文件
            fs.writeFileSync(outputFile, Buffer.from(data.Audio, 'base64'));
            console.log(`语音合成成功，已保存为: ${outputFile}`);
            return outputFile;
        } else {
            console.error('未返回有效的音频数据');
            return null;
        }
    } catch (error) {
        console.error(`语音合成失败: ${error}`);
        return null;
    }
}

module.exports = {
    textToSpeech
}; 